home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / media / objects / converte / tpoly2ob.c < prev   
Encoding:
C/C++ Source or Header  |  1994-10-03  |  4.7 KB  |  171 lines

  1. /* 
  2.  
  3.    simple tpoly-to-obj converter -   6/14/93 by Francisco X DeJesus
  4.  
  5.    dejesus@c3ot.saic.com     -    dejesus@avalon.chinalake.navy.mil
  6.  
  7.    (written under SunOS 4.1.3... tweaks may be necessary for the
  8.     date/time stuff to work, but it is not crucial, so they can be
  9.     commented out and a fake date hard-coded if neccesary).
  10.  
  11.    This program is provided "as-is" (ie: use it at your own risk!).
  12.    Permission is hereby granted to redistribute this program freely,
  13.    provided that this header is left unmodified. If you find any bugs or
  14.    modify the program to improve it in any way, please let me know...
  15.  
  16.    If you have any interesting 3D objects/models, in any format, please
  17.    upload them to the anonymous ftp archive avalon.chinalake.navy.mil!!!
  18.  
  19. */
  20.  
  21. #include <stdio.h>
  22. #include <sys/types.h>
  23. #include <sys/timeb.h>
  24. #include <sys/time.h>
  25. #include <strings.h>
  26.  
  27. static char *months[]=
  28.    {
  29.    "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
  30.    };
  31.  
  32. static char *days[]=
  33.    {
  34.    "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
  35.    };
  36.  
  37. main(argc,argv)
  38. int argc;
  39. char *argv[];
  40. {
  41.     FILE *fpn,*fpo;
  42.     struct timeval now;
  43.     struct timezone zone;
  44.     time_t then;
  45.     struct tm *t;
  46.     char infilename[40];
  47.     char outfilename[40];
  48.     int i, v, vtotal, faces;
  49.     float x,y,z;
  50.  
  51.     if (argc == 1)
  52.         {
  53.             printf("Tpoly file to be converted? ");
  54.             scanf("%s",infilename);
  55.             printf("Obj file to output? ");
  56.             scanf("%s",outfilename);
  57.             if ((fpn = fopen(infilename,"r")) == 0) {
  58.                 printf ("file does not exist: %s\n", infilename);
  59.                 exit ();
  60.                 }
  61.             if ((fpo = fopen(outfilename,"w")) == 0) {
  62.                 printf ("file cannot be created: %s\n", outfilename);
  63.                 exit ();
  64.                 }
  65.         }
  66.     else if (argc == 2)
  67.         {
  68.             if (strcmp (argv[1], "-h") == 0) {
  69.                 printf("usage:\n");
  70.                 printf("        tpoly2obj [inputfile.tpoly [outputfile.obj]]\n");
  71.                 printf("Please use full filenames. If files are not speficied on the\n");
  72.                 printf("command line, the program will prompt you for them.\n");
  73.                 exit();
  74.                 }
  75.             printf("Obj file to output? ");
  76.             scanf("%s",outfilename);
  77.             if ((fpn = fopen(argv[1],"r")) == 0) {
  78.                 printf ("file does not exist: %s\n", argv[1]);
  79.                 exit ();
  80.                 }
  81.             if ((fpo = fopen(outfilename,"w")) == 0) {
  82.                 printf ("file cannot be created: %s\n", outfilename);
  83.                 exit ();
  84.                 }
  85.         }
  86.     else
  87.         {
  88.             if ((fpn = fopen(argv[1],"r")) == 0) {
  89.                 printf ("file does not exist: %s\n", argv[1]);
  90.                 exit ();
  91.                 }
  92.             if ((fpo = fopen(argv[2],"w")) == 0) {
  93.                 printf ("file cannot be created: %s\n", argv[2]);
  94.                 exit ();
  95.                 }
  96.         }
  97.  
  98. /* convert! */
  99.  
  100.     vtotal=0;
  101.  
  102.         if (gettimeofday(&now,&zone)<0)
  103.                 perror("gettimeofday failed"), exit(2);
  104.  
  105.         if ((t=localtime(&now))==NULL)
  106.                 perror("localtime failed"), exit(3);
  107.  
  108.         if (t->tm_mday > 9)
  109.                 fprintf(fpo,"# %s %s %2.2d %2.2d:%2.2d:%2.2d %4.4d\n",
  110.                        days[t->tm_wday],months[t->tm_mon],t->tm_mday,
  111.                        t->tm_hour,t->tm_min,t->tm_sec,
  112.                        (1900+t->tm_year));
  113.         if (t->tm_mday < 10)
  114.                 fprintf(fpo,"# %s %s  %d %2.2d:%2.2d:%2.2d %4.4d\n",
  115.                         days[t->tm_wday],months[t->tm_mon],t->tm_mday,
  116.                         t->tm_hour,t->tm_min,t->tm_sec,
  117.                         (1900+t->tm_year));
  118.  
  119.     fprintf(fpo,"#\n");
  120.     fprintf(fpo,"# Object converted by tpoly2obj\n",infilename);
  121.     fprintf(fpo,"#\n\n");
  122.     fprintf(fpo,"g\n");
  123.  
  124.     printf("Starting conversion...\n");
  125.  
  126.     while (!feof(fpn))
  127.         {
  128.         fscanf(fpn,"%d",&v);
  129.         if (v != 3) {
  130.                break;
  131.           }
  132.         vtotal++;
  133.         v=0;
  134.  
  135. /* three vertices because each face is a triangle */
  136.  
  137.         fscanf(fpn,"%f %f %f",&x,&y,&z);
  138.         fprintf(fpo,"v %f %f %f\n",x,y,z);
  139.  
  140.         fscanf(fpn,"%f %f %f",&x,&y,&z);
  141.         fprintf(fpo,"v %f %f %f\n",x,y,z);
  142.  
  143.         fscanf(fpn,"%f %f %f",&x,&y,&z);
  144.         fprintf(fpo,"v %f %f %f\n",x,y,z);
  145.         }
  146.  
  147.     faces=vtotal;
  148.     vtotal=vtotal*3;
  149.  
  150.     printf("%d vertices\n",vtotal);
  151.  
  152.     fprintf(fpo,"# %d vertices\n\n",vtotal);
  153.  
  154.     fprintf(fpo,"# 0 texture vertices\n\n");
  155.  
  156.     fprintf(fpo,"# 0 normals\n\n");
  157.  
  158.     fprintf(fpo,"g default\n");
  159.  
  160.  
  161.     for (i=0;i<faces;i++) {
  162.       v=i*3;
  163.       fprintf (fpo,"f %d %d %d\n",(v+1),(v+2),(v+3));
  164.     }
  165.  
  166.     fprintf(fpo,"# %d elements\n\n",faces);
  167.  
  168.     fclose(fpn);
  169.     fclose(fpo);
  170. }
  171.